package secondStage.part4.特殊操作流;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * @ClassName: [ObjectOutputStreamDemo]
 * @Description: 对象序列化流
 * @Author: [黄劲松]
 * @CreateDate: [2021-04-05]
 * @Version: [v1.0]
 */
/*
4.3对象序列化流
    对象序列化:就是将对象保存到磁盘中，或者在网络中传输对象
    这种机制就是使用一-个字节例表示一个对象， 该字节序列包含:对象的类型、对象的数据和对象中存储的属性等信息
    字节序列写到文件之后，相当于文件中久保存了-个对象的信息
    反之，该字节序列还可以从文件中读取回来，重构对象,对它进行反序列化
要实现序列化和反序列化就要使用对象序列化流和对象反序列化流:
    对象序列化流: ObjectOutputStream
    对象反序列化流: ObjectInputStream

对象序列化流: ObjectOutputStream
    ●将Java对象的原始数据类型和图形写入OutputStream。 可以使用ObjectlnputStream读取 (重构)对象。可以通
    过使用流的文件来实现对象的持久存储。如果流是网络套接字流，则可以在另一个主机上或另一个进程中重构对象
构造方法:
    ●ObjectOutputStream(OutputStream out):创建一个写入指定的OutputStream的ObjectOutputStream
序列化对象的方法:
    ●void writeObject(Object obj):将指定的对象写入ObjectOutputStream
注意:
    ●一个对象要想被序列化,该对象所属的类必须必实现Serializable 接口
    ●Serializable是一个标记接口，实现该接口，不需要重写任何方法

    报错NotSerial izableException :抛出一个实例需要一个Serializable接口。 序列化运行时 或实例的类可能会抛出此异常
    类的序列化由实现java.io.Serializable接口的类启用。不实现此接口的类将不会 使任何状态序列化或反序列化
 */
public class ObjectOutputStreamDemo {
    public static void main(String[] args) throws IOException {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("java.txt"));
        //创建对象
        Student s = new Student("万里长城永不倒",22);
        //void writeObject(Object obj):将指定的对象写入ObjectOutputStream
        oos.writeObject(s);

        oos.close();
    }
}
